MVC架構:Odoo的Web應用程序使用MVC(Model-View-Controller)架構來組織代碼。控制器位於這個架構的控制層,負責處理客戶端的HTTP請求,並決定如何呈現頁面。
在開始之前我們須確保以下:
匯入模組:
# my_module/__init__.py
# 在開始controller設定之前,我們必須先將我們controllers給import進去
from . import controllers
# my_module/controllers/__init__.py
# 在開始controller設定之前,我們必須先將我們library_controller.py給import進去
from . import library_controller
# library_controller.py
from odoo import http
from odoo.http import request
class library_controller(http.Controller):
@http.route('/my_library/books', method=['GET'], type='http', auth='none')
def books(self):
books = request.env['library.book'].sudo().search([])
html_result = '<html><body><ul>'
for book in books:
html_result += "<li> %s </li>" % book.name
html_result += '</ul></body></html>'
return html_result
現在讓我們對這段程式碼進行解釋:
在 my_module/init.py 中,你從 controllers 模組中匯入了控制器。
在 my_module/controllers/init.py 中,你從 library_controller 模組中匯入了 library_controller。
library_controller.py 中是控制器的主要程式碼,它執行以下操作:
從 odoo 模塊中匯入 http 和 request,以便使用 Odoo 的 HTTP 功能。
定義一個名為 library_controller 的類別,該類別繼承自 http.Controller,這是 Odoo 提供的基本控制器類別。
使用 @http.route 裝飾器定義一個路由,這個路由處理 /my_library/books 這個 URL 後綴的 HTTP GET 請求。具體參數如下:
method=['GET']:指定這個路由僅處理 HTTP GET 請求。
type='http':表示這是一個 HTTP 路由。
auth='none':表示這個路由不需要身份驗證,任何人都可以訪問它。
定義一個名為 books 的方法,該方法處理 /my_library/books 路由的 GET 請求。方法的參數 self 是標準的 Python 慣例,表示這個方法屬於 library_controller 類別。
在 books 方法中,首先執行了以下操作:
使用 request.env['library.book'] 取得名為 library.book 的 Odoo 模型的記錄集(recordset)。
使用 .sudo() 方法取得超級使用者權限,以確保能夠讀取所有記錄。
使用 .search([]) 方法檢索所有圖書記錄,[] 表示檢索所有記錄。
接下來,建立一個 HTML 結果的字串 html_result,並使用 for 迴圈將圖書的名稱以無序列表的形式添加到字串中。
最後,將建構的 HTML 字串 html_result 作為 HTTP 回應返回,這樣當用戶訪問 /my_library/books 時,將看到包含圖書列表的網頁。
總之,這段程式碼是一個使用 Odoo 框架建立的控制器,它用於處理 HTTP GET 請求並呈現圖書列表。它使用了 Odoo 的 MVC 架構,其中控制器負責處理客戶端的請求,從模型中檢索數據,然後將結果以 HTML 形式返回給客戶端。路由的設置確保了這個網頁可以被任何人訪問,無需進行身份驗證。